package org.dlow.register;

import org.dlow.common.Host;
import org.dlow.common.URL;

import java.io.IOException;
import java.util.List;

/**
 * 服务注册表接口
 * 提供服务注册、发现、订阅等核心功能
 * 
 * @description: 服务注册中心接口，定义服务的注册、发现和订阅能力
 * @Author: 山沐与山
 * @CreateTime: 2024-05-10 21:12
 */
public interface ServiceRegistry {

    /**
     * 注册服务
     * @param url 服务URL信息
     * @throws Exception 注册失败异常
     */
    void registerService(URL url) throws Exception;

    /**
     * 注销服务
     * @param url 服务URL信息
     * @throws Exception 注销失败异常
     */
    void unregisterService(URL url) throws Exception;

    /**
     * 服务发现
     * @param serviceName 服务名称
     * @param version 服务版本
     * @return 服务提供者列表
     * @throws Exception 发现失败异常
     */
    List<URL> discoverServices(String serviceName, String version) throws Exception;

    /**
     * 订阅服务
     * @param url 订阅的服务URL
     * @throws Exception 订阅失败异常
     */
    void subscribeService(URL url) throws Exception;

    /**
     * 取消订阅服务
     * @param url 取消订阅的服务URL
     */
    void unsubscribeService(URL url);

}
